# !/usr/bin/python
# -*- coding: utf-8 -*-
'''
@File    :   5_pow().py
@Time    :   2021/11/04 16:43:20
@Author  :   Qingxiang Zhang
@Version :   1.0
@Contact :   344285081@qq.com
@Desc    :   分治算法
@Software:    Vscode
'''
"""实现 pow(x, n) ，即计算 x 的 n 次幂函数（即，xn）。
示例 1：
输入：x = 2.00000, n = 10
输出：1024.00000
示例 2：
输入：x = 2.10000, n = 3
输出：9.26100
示例 3：
输入：x = 2.00000, n = -2
输出：0.25000
解释：2-2 = 1/22 = 1/4 = 0.25
提示：
-100.0 < x < 100.0
-231 <= n <= 231-1
-104 <= xn <= 104"""

"""解题思路

* 确定切分的终止条件
  对`n`不断除以2，并更新`n`，直到为0，终止切分
* 准备数据，将大问题切分为小问题
  对`n`不断除以2，更新
* 处理子问题得到子结果，并合并
  * `x`与自身相乘更新`x`
  * 如果`n%2 ==1`
    - 将`p`乘以`x`之后赋值给`p`(初始值为1)，返回`p`
* 最终返回`p`"""

class Solution:
    def myPow(self, x: float, n: int) -> float:
        # 处理n为负值的情况
        if n < 0 :
            x = 1/x
            n = -n
        if n ==0:
            # 确定不断切分的终止条件
            return 1
        # 准备数据，并将大问题拆分为小的问题
        if n%2 ==1:
            # 处理小问题，得到子结果
            p = x * self.myPow(x,n-1)
            # 对子结果进行合并 得到最终结果
            return p
        return self.myPow(x*x,n/2)

        # 2*2   1
        # 
        # 